package come.bjpowernode.javase.reflect;

import come.bjpowernode.javase.reflect.service.UserService;

import java.lang.reflect.Method;

/*
通过反射机制怎么调用一个对象的方法？

    反射机制,让代码既有通用性，可变化的代码都写到配置文件当中，
    将来修改配置文件之后，创建的对象不一样了，调用的方法不一样了，
    但是java代码没有变，这就是反射机制的魅力。

 */
public class ReflectTest10 {
    public static void main(String[] args) throws Exception{
        //不使用机制怎么调用方法
        UserService userService = new UserService();
        boolean longInSuccess = userService.login("admin",
                "1234");
        System.out.println(longInSuccess ? "登录成功":"登录失败");
        userService.logout();

        //使用反射机制调用一个对象的方法
        Class userServiceClass = Class.forName("come.bjpowernode.javase.reflect.service.UserService");
        Object obj = userServiceClass.newInstance();
        //获取方法
        Method logInMethod = userServiceClass.getDeclaredMethod(
                "login",String.class,String.class);
        //调用方法
        Object retValue = logInMethod.invoke(obj,"admin","123");
        System.out.println(retValue);

    }
}
